<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        /**
         *  hasOwnProperty:
         *  作用：检测是一个属性是否是对象的私有属性
         *  语法： 对象.hasOwnProperty(属性)
         * 
         *  属性 in 对象：
         *  检测一个属性是否是对象的属性[私有、原型链上的]
         */
        function Person(name, age){
            this.name = name;
            this.age = age;
        }
        // 原型上的属性 aa 所有的实例都可以使用
        Person.prototype.aa = '666';

        var p1 = new Person('老张',19);
        var p2 = new Person('老李',20);
        console.log(p1.name, p2.name);

        console.log('name' in p1);

        console.log('aa' in p1);

        console.log(p1.hasOwnProperty('name'), p1.hasOwnProperty('aa'));

        // for in 循环，不仅可以遍历私有属性，还可以遍历自定义到原型对象上的公有属性
        for(var attr in p1){
            console.log(attr + ': ' + p1[attr]);
        }

        for(var attr in p1){
            if(p1.hasOwnProperty(attr)){// 都是私有属性
                console.log(attr + ': ' + p1[attr]);
            }
        }


    </script>
</body>
</html>